package com.hunttown.mes.test;

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * created by wangjunfu on 2019-08-11
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-config.xml")
public class MYSQL_JDBC {

//    private final static Logger LOGGER = LoggerFactory.getLogger(MYSQL_JDBC.class);
//
//    //整理数据库表字段
//    @Autowired
//    private TransportTableChineseEnglishRpcService rpcService;
//    @Autowired
//    private TransportTableChineseEnglishDetailRpcService detailRpcService;
//
//    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
//    private static final String URL = "jdbc:mysql://192.168.30.248:3306/enterprise_mes_com?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&nullNamePatternMatchesAll=true";
//    private static final String USERNAME = "root";
//    private static final String PASSWORD = "123456";
//
//    private static final String SQL = "SELECT * FROM ";// 数据库操作
//
//    static {
//        try {
//            Class.forName(DRIVER);
//        } catch (ClassNotFoundException e) {
//            LOGGER.error("can not load jdbc driver", e);
//        }
//    }
//
//    /**
//     * 获取数据库连接
//     *
//     * @return conn
//     */
//    public Connection getConnection() {
//        Connection conn = null;
//        try {
//            conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
//        } catch (SQLException e) {
//            LOGGER.error("get connection failure", e);
//        }
//        return conn;
//    }
//
//    /**
//     * 关闭数据库连接
//     *
//     * @param conn 连接
//     */
//    public void closeConnection(Connection conn) {
//        if (conn != null) {
//            try {
//                conn.close();
//            } catch (SQLException e) {
//                LOGGER.error("close connection failure", e);
//            }
//        }
//    }
//
//    /**
//     * 获取数据库下的所有表名
//     *
//     * @return 数据表List
//     */
//    public List<String> getTableNames() {
//        List<String> tableNames = new ArrayList<>();
//        Connection conn = getConnection();
//        ResultSet rs = null;
//        try {
//            //获取数据库的元数据
//            DatabaseMetaData db = conn.getMetaData();
//
//            //从元数据中获取到所有的表名
//            rs = db.getTables(null, null, null, new String[]{"TABLE"});
//
//            while (rs.next()) {
//                if (rs.getString(1).equals("enterprise_mes_com")) {
//                    tableNames.add(rs.getString(3));
//                }
//            }
//
//        } catch (SQLException e) {
//            LOGGER.error("getTableNames failure", e);
//        } finally {
//            try {
//                rs.close();
//                closeConnection(conn);
//            } catch (SQLException e) {
//                LOGGER.error("close ResultSet failure", e);
//            }
//        }
//        return tableNames;
//    }
//
//    /**
//     * 获取表中所有字段名称
//     *
//     * @param tableName 表名
//     * @return 字段List
//     */
//    public List<String> getColumnNames(String tableName) {
//        List<String> columnNames = new ArrayList<>();
//
//        //与数据库的连接
//        Connection conn = getConnection();
//        PreparedStatement pStemt = null;
//        String tableSql = SQL + tableName;
//
//        try {
//            pStemt = conn.prepareStatement(tableSql);
//            //结果集元数据
//            ResultSetMetaData rsmd = pStemt.getMetaData();
//            //表列数
//            int size = rsmd.getColumnCount();
//            for (int i = 0; i < size; i++) {
//                columnNames.add(rsmd.getColumnName(i + 1));
//            }
//        } catch (SQLException e) {
//            LOGGER.error("getColumnNames failure", e);
//        } finally {
//            if (pStemt != null) {
//                try {
//                    pStemt.close();
//                    closeConnection(conn);
//                } catch (SQLException e) {
//                    LOGGER.error("getColumnNames close pstem and connection failure", e);
//                }
//            }
//        }
//
//        return columnNames;
//    }
//
//    /**
//     * 获取表中所有字段类型
//     *
//     * @param tableName 表名
//     * @return 字段类型List
//     */
//    public List<String> getColumnTypes(String tableName) {
//        List<String> columnTypes = new ArrayList<>();
//
//        //与数据库的连接
//        Connection conn = getConnection();
//        PreparedStatement pStemt = null;
//        String tableSql = SQL + tableName;
//
//        try {
//            pStemt = conn.prepareStatement(tableSql);
//
//            //结果集元数据
//            ResultSetMetaData rsmd = pStemt.getMetaData();
//
//            //表列数
//            int size = rsmd.getColumnCount();
//            for (int i = 0; i < size; i++) {
//                columnTypes.add(rsmd.getColumnTypeName(i + 1));
//            }
//        } catch (SQLException e) {
//            LOGGER.error("getColumnTypes failure", e);
//        } finally {
//            if (pStemt != null) {
//                try {
//                    pStemt.close();
//                    closeConnection(conn);
//                } catch (SQLException e) {
//                    LOGGER.error("getColumnTypes close pstem and connection failure", e);
//                }
//            }
//        }
//        return columnTypes;
//    }
//
//    /**
//     * 获取表中字段的所有注释
//     *
//     * @param tableName 表名
//     * @return 注释List
//     */
//    public List<String> getColumnComments(String tableName) {
//        List<String> columnTypes = new ArrayList<>();
//
//        //与数据库的连接
//        Connection conn = getConnection();
//        PreparedStatement pStemt = null;
//        String tableSql = SQL + tableName;
//        List<String> columnComments = new ArrayList<>();//列名注释集合
//        ResultSet rs = null;
//
//        try {
//            pStemt = conn.prepareStatement(tableSql);
//            rs = pStemt.executeQuery("show full columns from " + tableName);
//            while (rs.next()) {
//                columnComments.add(rs.getString("Comment"));
//            }
//        } catch (SQLException e) {
//            e.printStackTrace();
//        } finally {
//            if (rs != null) {
//                try {
//                    rs.close();
//                    closeConnection(conn);
//                } catch (SQLException e) {
//                    LOGGER.error("getColumnComments close ResultSet and connection failure", e);
//                }
//            }
//        }
//        return columnComments;
//    }
//
//    public void main(String[] args) {
//        List<String> tableNames = getTableNames();
//        //System.out.println("tableNames:" + tableNames);
//
//        for (String tableName : tableNames) {
//            System.out.println(tableName);
//
//            List<String> ColumnNames = getColumnNames(tableName);
//            List<String> ColumnTypes = getColumnTypes(tableName);
//            List<String> ColumnComments = getColumnComments(tableName);
//
//            for (int i = 0; i < ColumnNames.size(); i++) {
//                System.out.println(ColumnNames.get(i) + " " + ColumnTypes.get(i) + "  " + ColumnComments.get(i));
//            }
//        }
//    }
//
//    //执行此方法
//    @Test
//    public void handleData() {
//        List<String> tableNames = getTableNames();
//
//        for (String tableName : tableNames) {
//            System.out.println(tableName);
//
//            //通过TableName查询数据库中是否有此表
//            TransportTableChineseEnglishDTOQuery query = new TransportTableChineseEnglishDTOQuery();
//            query.setTableName(tableName);
//            TransportTableChineseEnglishDTO dto = rpcService.selectObjByQuery(query);
//            if (dto == null) {
//                //如果没有，则插入。
//                dto = new TransportTableChineseEnglishDTO();
//                dto.setTableName(tableName);
//                dto.setTableNameCn("");
//                dto.setRemark("");
//                dto.setStopFlag(0);
//                dto.setDeleteFlag(0);
//                dto = rpcService.insert(dto);
//            }
//
//            if (dto.getId() > 0) {
//                List<String> ColumnNames = getColumnNames(tableName);
//                List<String> ColumnTypes = getColumnTypes(tableName);
//                List<String> ColumnComments = getColumnComments(tableName);
//
//                for (int i = 0; i < ColumnNames.size(); i++) {
//                    System.out.println(ColumnNames.get(i) + " " + ColumnTypes.get(i) + "  " + ColumnComments.get(i));
//                    TransportTableChineseEnglishDetailDTO detailDTO = new TransportTableChineseEnglishDetailDTO();
//                    detailDTO.setTableId(dto.getId());
//                    detailDTO.setFieldName(ColumnNames.get(i));
//                    detailDTO.setFieldNameCn(ColumnComments.get(i));
//                    detailDTO.setFieldType(ColumnTypes.get(i));
//                    if (ColumnNames.get(i).equals("delete_flag")) {
//                        detailDTO.setFrontShow(0);
//                    } else {
//                        detailDTO.setFrontShow(1);
//                    }
//                    detailDTO.setRemark("");
//                    detailDTO.setStopFlag(0);
//                    detailDTO.setDeleteFlag(0);
//                    detailRpcService.insert(detailDTO);
//                }
//            }
//        }
//    }

}
